6-4 p蔇u吨{

線性代數中最重要的問題,即是解決線性聯立方程式。一組線性聯立方程式可用矩陣表示如下:

$$Ax = b$$

其中 $A$ 是已知矩陣,$b$ 是已知行向量,而 $x$ 則是未知行向量。為簡化起見,我們可以假設 $A$、$x$、$b$ 的維度分別是 m×n、n×1、m×1, 其中 m 代表方程式的數目,n 則是未知數的數目,可以分成三種情況來討論:

  1. 若 m = n,代表方程式的個數和未知數的個數相等,此時通常會有一組解 $x$ 滿足 $Ax=b$。
  2. 若 m > n,代表方程式的個數大於未知數的個數,此時通常無一解可滿足 $Ax=b$,但我們可轉而求取最小平方解(Least-Squares Solution)$\hat{x}$,滿足 $\hat{x}=\arg \min_x |Ax-b|^2$。
  3. 若 m < n,代表方程式的個數小於未知數的個數,此時通常有無限多組解 $x$ 可滿足 $Ax=b$,我們可尋求一基本解(Basic Solution)$x$,使得 $x$ 最少包含 m-n 個零元素。

MATLAB 提供一個反斜線運算(Back Slash Operator,即「\」)使得 x=A\b 能滿足上述三種情況,此反斜線運算又稱「左除」(Left Division)。 同理,MATLAB 也提供了斜線運算(Slash Operator,即「/」)或「右除」(Right Division),以對付 $xA=b$ 的方程組($x$、$A$、$b$ 的維度分別是 1×m、m×n、1×n)。

整理:MATLAB 的左除和右除
聯立方程式形式MATLAB 解法
$Ax=b$左除:x = A\b
$xA=b$右除:x = b/A

在上表中,欲解 $Ax=b$ 或 $xA=b$,我們可以想像在等號兩邊各除以 $A$,並依 $A$ 的位置分別取用「左除」或「右除」。

由於 $xA=b$ 和 $A^Tx^t=b^T$ 是等效的,因此 b/A = (A'\b')',所以在下面的討論,我們均以「左除」來代表 MATLAB 解線性方程式的方法。以下是幾個使用「左除」的例子。

Example 1: 06-線性代數/leftDiv01.mA = vander(1:3); b = [6; 11; 18]; x = A\b error = A*x-bx = 1.0000 2.0000 3.0000 error = 0 0 0

在上例中,A 是一個 3×3 的萬得夢矩陣(Vandermende Matrix),因此 x = A\b 得到一組唯一解。 (萬得夢矩陣的一般形式為 $V= \begin{bmatrix} 1 & \alpha_1 & \alpha_1^2 & \dots & \alpha_1^{n-1} \\ 1 & \alpha_2 & \alpha_2^2 & \dots & \alpha_2^{n-1} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & \alpha_m & \alpha_m^2 & \dots & \alpha_m^{n-1} \\ \end{bmatrix}$,當 $m=n$ 時,其行列式可以表示成 $det(V)=\prod_{\substack{1 \le i < j \le n}} (\alpha_j - \alpha_i)$,因此如果 $\alpha_i \neq \alpha_j, \forall i \neq j$,其行列式將不會等於零。)

Hint
  • 上例代表通過 (1,6)、 (2,11)、 (3,18) 三點的二次曲線為 $y=x^2+2x+3$。(為什麼?)
  • MATLAB 的「左除」常被用於「曲線擬合」(Curve Fitting)與「迴歸分析」(Regression Analysis),可參見本書「曲線擬合與迴歸分析」之章節。

當 m > n 時,「左除」可以找到最小平方解。舉例如下:

Example 2: 06-線性代數/leftDiv02.mA = [2 -1; 1 -2; 1 1]; b = [2; -2; 1]; x = A\bx = 1.0000 1.0000

在上例中,我們有 3 個方程式,但卻只有 2 個未知數,此 3 個方程式在 X-Y 平面並未交於一點,故嚴格地說,此方程組無解,而 MATLAB的「左除」找到的 $x$ 為最小平方解,可以使得 $|Ax-b|^2$ 為最小值。

Hint
在上例中,假設 $x$ 到三條直線方程式的距離是 $l_1$、$l_2$ 及 $l_3$,則 x=A\b 能使 $5l_1^2+5l_2^2+l_3^2$ 的值為最為小。(為什麼?)

當 m < n 時,「左除」可以找到基本解,舉例如下:

Example 3: 06-線性代數/leftDiv03.mA = [1 2 3; 4 5 6]; B = [7; 8]; X = A\BX = -3.0000 0 3.3333

MATLAB 在進行「左除」時,實際上用到了很多矩陣的運算及變形,例如:LU Decomposition,QR Factorization,Cholesky Factorization, 以及一般的高斯消去法(Gaussian Elimination)等。由於此部份牽涉較深的線性代數及數值方法,在此不深入介紹。 相關的 MATLAB 指令有 lu、qr 及 chol 等,讀者可由 MATLAB 線上支援得到更多的資訊。


MATLAB程式設計:進階篇